package com.bjpowernode.converter;

import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import com.bjpowernode.DlykServerApplication;
import com.bjpowernode.constant.DicEnum;
import com.bjpowernode.entity.TDicValue;

import java.util.List;

/**
 * Excel贷款需求转换器
 * 实现EasyExcel的Converter接口，用于将Excel中读取的贷款需求状态文本值转换为系统内部对应的字典ID
 */
public class NeedLoanConverter implements Converter<Integer> {
    /**
     * 将Excel单元格中的贷款需求状态文本值转换为系统字典ID
     * 从缓存中获取贷款需求类型的字典值列表，通过文本匹配查找对应的ID；未找到匹配项时返回列表中第一个字典ID
     *
     * @param cellData            Excel单元格数据对象，包含读取到的贷款需求状态文本值（如"是"、"否"等）
     * @param contentProperty     Excel内容属性配置（当前字段的Excel相关配置信息）
     * @param globalConfiguration EasyExcel全局配置对象
     * @return 匹配的贷款需求字典ID；若未找到匹配项，返回字典列表中第一个ID
     * @throws  转换过程中可能抛出的异常（如缓存数据获取失败等）
     */
    @Override
    public Integer convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        String stringValue = cellData.getStringValue(); //读取到的Excel单元格的数据
        //转成java中的Integer
        // 从全局缓存中获取贷款需求类型的字典值列表（缓存key为贷款需求字典类型编码）
        List<TDicValue> tDicValues =  (List<TDicValue>) DlykServerApplication.cacheMap.get(DicEnum.NEED_LOAN.getCode());

        // 遍历字典值列表，匹配文本值对应的字典ID
        for (TDicValue tDicValue : tDicValues) {
            Integer id = tDicValue.getId();          // 字典ID（系统内部存储值）
            String typeValue = tDicValue.getTypeValue();  // 字典文本值（Excel中显示的文本）
            if (stringValue.equals(typeValue)) {     // 文本值匹配时返回对应ID
                return id;
            }
        }

        // 若未找到匹配的文本值，返回字典列表中第一个ID作为默认值
        return tDicValues.get(0).getId();
    }
}
